#ifndef OWNER_H
#define OWNER_H

#include "..\Node\Node.h"
#include "..\LinkedListGeneralDefinition\LinkedListGeneralDefinition.h"

struct OWNER {
	nodeAddress node;
	
	struct OWNER *next;
};

typedef struct OWNER owner;
typedef owner* ownerAddress;

typedef ownerAddress ownerList;

// SELEKTOR
#define	NODE(O)	(O)->node

// KONSTRUKTOR - DESTRUKTOR
ownerList		CreateEmptyOwnerList();
ownerAddress	AllocateOwnerList(nodeAddress A);
ownerAddress	AllocateOwnerListAdv(nodeAddress A, ownerAddress next);
void			DeallocateOwner(owner *e);

// OPERASI
void			AddOwner(ownerList *EL, ownerAddress e);
/**********************************************************************************
	Menambahkan e ke EL
	I.S. : 	e sudah dialokasi
	F.S. : 	EL berisi e
**********************************************************************************/ 

ownerAddress	SearchOwnerByNode(ownerList *EL, nodeAddress e);
/**********************************************************************************
	Mencari owner dengan nodeAddress e
	I.S. : 	e sudah dialokasi
	F.S. : 	return ownerAddress tempat e ditemukan. Jika tidak ditemukan return NULL
**********************************************************************************/ 

void PrintListOwner(ownerList O);

void		DestroyOwner(ownerList *O, ownerAddress A);
/**********************************************************************************
	Mendealokasi owner dari O.
	I.S. : 	owner ada di dalam O
	F.S. : 	owner tidak ada di dalam O. owner didealokasi.
**********************************************************************************/ 

void		DestroyOwnerList(ownerList *O);
/**********************************************************************************
	Mendealokasikan semua elemen dari list
	I.S. : 	Sembarang, list bisa kosong
	F.S. : 	ownerList O menjadi kosong
**********************************************************************************/

ownerList CopyOwnerList(ownerList O);

#endif
